package manager

import (
	"account/configs"
	"account/routes"
	"account/server/component"
	"context"
	"strings"

	"fmt"

	"github.com/gin-gonic/gin"
)

// 配置并启动服务
func Run(ctx context.Context) {

	// 开启后台任务
	newAccountTransfer := component.NewAccountTransfer()
	newAccountQueueTransfer := component.NewAccountQueueTransfer()
	go newAccountTransfer.Launch(ctx)
	go newAccountQueueTransfer.Launch(ctx)
	fmt.Println("启动后台任务成....")

	// 数据库迁移
	// server.AutoMigrate()
	fmt.Println(" 数据库迁移成功.... ")

	// 服务配置
	serverConfig := configs.GetServerConfig()
	fmt.Println(" 加载服务器配置.... ")

	// gin 运行时 release debug test
	gin.SetMode(serverConfig["ENV"])
	fmt.Println(" 加载服务器环境.... ")

	httpServer := gin.Default()

	// 配置视图
	if strings.Compare(serverConfig["VIEWS_PATTERN"], "") != 0 {
		httpServer.LoadHTMLGlob(serverConfig["VIEWS_PATTERN"])
		fmt.Println(" 加载服务器前端配置.... ")

	}

	// 注册路由
	routes.RegisterRouterGroup(httpServer)
	fmt.Println(" 加载服务器路由配置.... ")

	serverAddr := serverConfig["HOST"] + ":" + serverConfig["PORT"]

	// 启动服务
	err := httpServer.Run(serverAddr)
	fmt.Println(" 启动服务器成功.... ")

	if nil != err {
		panic("server run error: " + err.Error())
	}
}
